package org.ala.tiktools.rocketmq.annotations;


import org.ala.tiktools.rocketmq.Namespace;
import org.springframework.stereotype.Component;

import java.lang.annotation.*;

/**
 * Consumer方法注解
 * <p>  一个Method会生成一个Consumer
 *
 * @author ala
 * @date 2024-11-29 13:55
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConsumerMethod {


    /**
     *  group
     *  <p> 如果是NULL，跟随ConsumerService的配置
     */
    String group() default Namespace.NULL;
    /**
     *  topic
     *  <p> 如果是NULL，跟随ConsumerService的配置
     */
    String topic() default Namespace.NULL;
    /**
     *  tag
     */
    String tag() default "*";

    /**
     *  线程池相关配置
     *  <p> 如果这里配了大小，则该ConsumerMethod使用独立线程池
     *  <p> 否则使用ConsumerService的线程池
     */
    int coreSize() default Namespace.INF;
    int maxSize() default Namespace.INF;
    /**
     *  如果是-1，跟随ConsumerService的配置
     *  当队列满时，消费会暂停。当队列长度小于 queueSize * queueRation 时，消费会继续
     */
    int queueSize() default Namespace.INF;
    float queueRation() default -1f;

    /**
     *  是否广播模式
     */
    boolean broadCasting() default false;
    /**
     *  是否顺序消费
     */
    boolean orderly() default false;
}
